<?php
// +----------------------------------------------------------------------
// | 微梦系统[ 赋能开发者，助力企业发展 ]
// +----------------------------------------------------------------------
// | 版权所有 2018~2024 北京微梦世创科技有限公司
// | 官方网站: https://bjwmsc.com
// +----------------------------------------------------------------------
// | Author: @Tinymeng 666@majiameng.com
// +----------------------------------------------------------------------
// | 版权和免责声明:
// | 本团队对该软件框架产品拥有知识产权（包括但不限于商标权、专利权、著作权、商业秘密等）
// | 均受到相关法律法规的保护，任何个人、组织和单位不得在未经本团队书面授权的情况下对所授权
// | 软件框架产品本身申请相关的知识产权，禁止用于任何违法、侵害他人合法权益等恶意的行为，禁
// | 止用于任何违反我国法律法规的一切项目研发，任何个人、组织和单位用于项目研发而产生的任何
// | 意外、疏忽、合约毁坏、诽谤、版权或知识产权侵犯及其造成的损失 (包括但不限于直接、间接、
// | 附带或衍生的损失等)，本团队不承担任何法律责任，本软件框架禁止任何单位和个人、组织用于
// | 任何违法、侵害他人合法利益等恶意的行为，如有发现违规、违法的犯罪行为，本团队将无条件配
// | 合公安机关调查取证同时保留一切以法律手段起诉的权利，本软件框架只能用于公司和个人内部的
// | 法律所允许的合法合规的软件产品研发，详细声明内容请阅读《框架免责声明》附件；
// +----------------------------------------------------------------------

namespace App\Services\Admin\Dashboard;


use App\Models\ConstCode;
use App\Models\MysqlDb\PaymentOrderModel;
use App\Services\BaseService;
use Illuminate\Support\Facades\DB;

/**
 * 分析
 * @author Tinymeng
 * @date: 2023/3/28 11:10
 */
class AnalysisService extends BaseService
{
    /**
     * 构造函数
     */
    public function __construct()
    {
        $this->model = new PaymentOrderModel();
    }

    /**
     * 获取数据列表
     * @return array
     * @author Tinymeng
     * @date: 2023/3/28 11:11
     */
    public function getList()
    {
        $result = [];
        return $result;
    }

    /**
     * 获取支付笔数数据
     * @return array
     */
    public function getPayNumData(){
        $this->params = [
            'start_time'=>strtotime(date('Y-m-01 00:00:00')),
            'end_time'=>strtotime(date('Y-m-t 23:59:59')),
            'is_pay'=>ConstCode::STATUS_NORMAL,
        ];
        $this->getWhere();
        $list = $this->model->where($this->where)
            ->groupBy('date')
            ->get([
                DB::raw("DATE(FROM_UNIXTIME(`pay_time`)) AS date, COUNT(*) as value"),
            ])
            ->toArray();

        $result = [
            'list'=>$list,
        ];
        return message(MESSAGE_OK, true, $result);
    }

    public function getWhere(){
        if(!empty($this->params['start_time'])) $this->where[] = ['pay_time','>=',$this->params['start_time']];
        if(!empty($this->params['end_time'])) $this->where[] = ['pay_time','<=',$this->params['end_time']];
        if(!empty($this->params['is_pay'])) $this->where[] = ['is_pay','=',$this->params['is_pay']];
    }

    /**
     * 获取销售量数据
     * @return array
     */
    public function getSaleroomData(){
        $this->params = [
            'start_time'=>strtotime(date('Y-01-01 00:00:00')),
            'end_time'=>strtotime(date('Y-12-31 23:59:59')),
            'is_pay'=>ConstCode::STATUS_NORMAL,
        ];
        $this->getWhere();
        $saleroomData = $this->model->where($this->where)
            ->groupBy('month')
            ->get([
                DB::raw("DATE_FORMAT(FROM_UNIXTIME(`pay_time`), '%m') AS month, sum(amount - refund_amount) as value"),
            ])
            ->toArray();

        $result = [
            'saleroomData'=>$saleroomData
        ];
        return message(MESSAGE_OK, true, $result);
    }


    /**
     * 获取最近1小时访问情况数据
     * @return array
     */
    public function getVisitHourData(){
        $result = [];
        return message(MESSAGE_OK, true, $result);
    }

    /**
     * 获取词云数据
     * @return array
     */
    public function getWordCloudData(){
        $result = [];
        return message(MESSAGE_OK, true, $result);
    }

}
